DBSCAN (Density-Based Spatial Clustering of Applications with Noise) 是一種常用的密度基群聚演算法,適用於識別資料集中形狀不規則的群聚。DBSCAN透過密度的概念來識別核心點、邊界點以及噪聲點,並根據這些點來形成群聚。
Eps (ε): 這是鄰域的半徑範圍,即定義了資料點周圍的範圍,超過這個範圍的點不再被認為是相鄰的點。
MinPts: 這是形成一個群聚的最少點數量,即在範圍為ε的鄰域中至少需要有MinPts個點,該資料點才會被視為核心點。
核心點 (Core Points): 如果某個點的ε鄰域內至少包含MinPts個點,那麼該點被稱為核心點。
邊界點 (Border Points): 一個點的ε鄰域內點的數量少於MinPts,但它是在某個核心點的ε鄰域內,那麼該點被稱為邊界點。
噪聲點 (Noise Points): 不屬於任何群聚的點即被標記為噪聲點。
from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import DBSCAN
import matplotlib.pyplot as plt
import pandas as pd
iris = load_iris()
X = iris.data
X_scaled = StandardScaler().fit_transform(X)
dbscan = DBSCAN(eps=0.5, min_samples=5)
dbscan.fit(X_scaled)
labels = dbscan.labels_
df = pd.DataFrame(X, columns=iris.feature_names)
df['Cluster'] = labels
plt.figure(figsize=(10, 6))
plt.scatter(df.iloc[:, 0], df.iloc[:, 1], c=labels, cmap='viridis')
plt.title('DBSCAN Clustering of Iris Dataset')
plt.xlabel(iris.feature_names[0])
plt.ylabel(iris.feature_names[1])
plt.show()